#Boa:Frame:AprobarAjustes

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)

def create(parent):
    return AprobarAjustes(parent)

[wxID_APROBARAJUSTES, wxID_APROBARAJUSTESBUTTON1, wxID_APROBARAJUSTESBUTTON2, 
 wxID_APROBARAJUSTESGRID1, wxID_APROBARAJUSTESPANEL1, 
 wxID_APROBARAJUSTESSTATICTEXT1, wxID_APROBARAJUSTESSTATICTEXT2, 
 wxID_APROBARAJUSTESSTATICTEXT3, wxID_APROBARAJUSTESSTATICTEXT4, 
 wxID_APROBARAJUSTESSTATICTEXT5, wxID_APROBARAJUSTESSTATICTEXT6, 
 wxID_APROBARAJUSTESSTATICTEXT7, wxID_APROBARAJUSTESSTATICTEXT8, 
 wxID_APROBARAJUSTESSTATICTEXT9, 
] = [wx.NewId() for _init_ctrls in range(14)]

class AprobarAjustes(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_APROBARAJUSTES, name='AprobarAjustes',
              parent=prnt, pos=wx.Point(44, 58), size=wx.Size(986, 473),
              style=wx.DEFAULT_FRAME_STYLE, title='Aprobar ajustes')
        self.SetClientSize(wx.Size(978, 446))

        self.panel1 = wx.Panel(id=wxID_APROBARAJUSTESPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(978, 446),
              style=wx.TAB_TRAVERSAL)

        self.grid1 = wx.grid.Grid(id=wxID_APROBARAJUSTESGRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(8, 8), size=wx.Size(960, 376),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnSeleccionarRenglon)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK,
              self.OnSeleccionDetalle)

        self.button1 = wx.Button(id=wxID_APROBARAJUSTESBUTTON1, label='Salir',
              name='button1', parent=self.panel1, pos=wx.Point(888, 416),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_APROBARAJUSTESBUTTON1)

        self.button2 = wx.Button(id=wxID_APROBARAJUSTESBUTTON2,
              label='Procesar', name='button2', parent=self.panel1,
              pos=wx.Point(520, 416), size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_APROBARAJUSTESBUTTON2)

        self.staticText1 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT1,
              label='Sucursales', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 392), size=wx.Size(61, 13), style=0)
        self.staticText1.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText2 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT2,
              label='1 - Casa Central', name='staticText2', parent=self.panel1,
              pos=wx.Point(8, 408), size=wx.Size(78, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT3,
              label='2 - Parana', name='staticText3', parent=self.panel1,
              pos=wx.Point(8, 424), size=wx.Size(50, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT4,
              label='3 - Saska', name='staticText4', parent=self.panel1,
              pos=wx.Point(112, 408), size=wx.Size(44, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT5,
              label='4 - Peatonal Santa Fe', name='staticText5',
              parent=self.panel1, pos=wx.Point(112, 424), size=wx.Size(104, 13),
              style=0)

        self.staticText6 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT6,
              label='- Doble click izquierdo: cambia estado de la aprobacion',
              name='staticText6', parent=self.panel1, pos=wx.Point(232, 408),
              size=wx.Size(260, 13), style=0)

        self.staticText7 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT7,
              label='- Doble click derecho: visualiza detalle de la operacion',
              name='staticText7', parent=self.panel1, pos=wx.Point(232, 424),
              size=wx.Size(256, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT8,
              label='Instrucciones', name='staticText8', parent=self.panel1,
              pos=wx.Point(232, 392), size=wx.Size(77, 13), style=0)
        self.staticText8.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText9 = wx.StaticText(id=wxID_APROBARAJUSTESSTATICTEXT9,
              label='Procesa los aprobados (OK) y borrados.',
              name='staticText9', parent=self.panel1, pos=wx.Point(520, 400),
              size=wx.Size(192, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.crearGrilla()
        self.llenarGrilla()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrilla(self):
        columnas = ['id','Fecha','Suc','Usuario','Numero\nCliente','Nombre','Operacion','Fecha\nOperacion','Descripcion','%','$','Antes','Despues','Aprobado']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.ajustarAnchoColumnas()
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

    def OnSeleccionarRenglon(self, event):
        fila = self.grid1.GetGridCursorRow()
        color = BLANCO
        if self.grid1.GetCellBackgroundColour(fila,0)==BLANCO:
            color=VERDE
            self.grid1.SetCellValue(fila,self.grid1.GetNumberCols()-1,"OK")
        if self.grid1.GetCellBackgroundColour(fila,0)==VERDE:
            color=ROJO
            self.grid1.SetCellValue(fila,self.grid1.GetNumberCols()-1,"BORRAR")
        if self.grid1.GetCellBackgroundColour(fila,0)==ROJO:
            color=BLANCO
            self.grid1.SetCellValue(fila,self.grid1.GetNumberCols()-1,"PENDIENTE")
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.SetCellBackgroundColour(fila,col,color)
        self.grid1.Refresh()

    def llenarGrilla(self):
        sql = "SELECT * FROM vtas_ctasctes_ajustes WHERE aprobado='0'"
        resultado = consultasBD.ordenCrudaDict(sql)
        if resultado == None:
            resultado == ()
            utiles.mensaje(None,"No hay recargos/descuentos pendientes")
        for fila,item in enumerate(resultado):
            id = str(int(item["id"]))
            fecha = utiles.invertirFecha2(str(item["fecha"])[:10])
            sucursal = str(int(item["sucursal"])+1)
            usuario = str(item["usuario"])
            idcliente = str(item["idcliente"])
            nombre = str(item["nombre"])[:20]
            if item["tipooperacion"] == "RECA":
                tipooperacion = "RECARGO"
            else:
                tipooperacion = "DESCUENTO"
            fechaoperacion = utiles.invertirFecha2(str(item["fechaoperacion"])[:10])
            descripcion = item["descripcion"][:20]
            porcentaje = str(item["porcentaje"])
            valor = str(item["valor"])
            viejadeuda = str(item["viejadeuda"])
            nuevadeuda = str(item["nuevadeuda"])
            aprobado = "PENDIENTE"
            #Fecha,Sucursal,Usuario,idcliente,Nombre,Operacion,Fecha\nOperacion,
            #0     1        2       3         4      5         6                
            #Descripcion,Porcentaje,Monto,Antes,Despues,Aprobado
            #7           8          9     10    11      12
            self.grid1.SetCellValue(fila,0,id)
            self.grid1.SetCellValue(fila,1,fecha)
            self.grid1.SetCellAlignment(fila,1,wx.ALIGN_CENTER,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,2,sucursal)
            self.grid1.SetCellValue(fila,3,usuario)
            self.grid1.SetCellValue(fila,4,idcliente)
            self.grid1.SetCellValue(fila,5,nombre)
            self.grid1.SetCellValue(fila,6,tipooperacion)
            self.grid1.SetCellValue(fila,7,fechaoperacion)
            self.grid1.SetCellAlignment(fila,7,wx.ALIGN_CENTER,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,8,descripcion)
            self.grid1.SetCellValue(fila,9,porcentaje)
            self.grid1.SetCellAlignment(fila,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,10,valor)
            self.grid1.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,11,viejadeuda)
            self.grid1.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,12,nuevadeuda)
            self.grid1.SetCellAlignment(fila,12,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,13,aprobado)
            self.grid1.AppendRows()
            
        self.ajustarAnchoColumnas()

    def OnSeleccionDetalle(self, event):
        fila = self.grid1.GetGridCursorRow()
        estado = self.grid1.GetCellValue(fila,self.grid1.GetNumberCols()-1)
        id = self.grid1.GetCellValue(fila,0)
        r1 = "SELECT * FROM vtas_ctasctes_ajustes \n"
        r2 = "WHERE id='"+id+"' \n"
        sql = r1+r2
        resultado = consultasBD.ordenCrudaDict(sql)
        import ClienteDetalleRecargo
        appBack = ClienteDetalleRecargo.create(None,resultado[0],estado)
        appBack.Show()
        return        

    def OnSalir(self, event):
        self.Close()

    def borrarRenglon(self,fila):
        for i in xrange(self.grid1.GetNumberCols()):
            self.grid1.SetCellValue(fila,i,"")

    def limpiarGrilla(self):
        self.grid1.ClearGrid()
        for i in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()

    def OnProcesar(self, event):
        print "Procesando"
        error = False
        for fila in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fila,0) == "" or \
               self.grid1.GetCellValue(fila,self.grid1.GetNumberCols()-1)=="PENDIENTE":
               continue     
            #Fecha,Sucursal,Usuario,idcliente,Nombre,Operacion,Fecha\nOperacion,
            #0     1        2       3         4      5         6                
            #Descripcion,Porcentaje,Monto,Antes,Despues,Aprobado
            #7           8          9     10    11      12
            if self.grid1.GetCellValue(fila,self.grid1.GetNumberCols()-1)=="BORRAR":
                self.borrarAjuste(fila)
                continue
            #se guarda el recargo/descuento
            sucursal = self.grid1.GetCellValue(fila,2)
            #idventa = utiles.secuencia("ventas", sucursal)
            idventa = utiles.secuencia("ventas", "9")
            nrofactura = "0"
            vencimiento = utiles.invertirFecha(self.grid1.GetCellValue(fila,7)[:10])
            idcliente = self.grid1.GetCellValue(fila,4)
            idformapagos = "CC"
            descripcion = self.grid1.GetCellValue(fila,6)[:4]+":"+self.grid1.GetCellValue(fila,8)
            cuota="1"
            if self.grid1.GetCellValue(fila,6)=="RECARGO":
                montocuota=str(self.grid1.GetCellValue(fila,10))
            else:
                montocuota=str(Decimal(self.grid1.GetCellValue(fila,10))*Decimal("-1.00"))
            montopagado="0.00"

            r1 = "vtas_ctasctes(idventa,nrofactura,vencimiento,idcliente,"
            r2 = "idformapagos,descripcion,cuota,montocuota)"
            tablaSQL = r1+r2
            r1 = "('"+idventa+"','"+nrofactura+"','"+vencimiento+"','"+idcliente
            r2 = "','"+idformapagos+"','"+descripcion+"','"+cuota+"','"
            r3 = montocuota+"')"
            camposSQL = r1+r2+r3
            try:
                id = consultasBD.executaInsertSQLRemoto(None,tablaSQL,camposSQL,int(sucursal)-1)
                print "Actualizado",idcliente,self.grid1.GetCellValue(fila,5)
            except:
                print "ERROR: no se actualizo el renglon",fila
                error = True
                self.borrarRenglon(fila)
                self.grid1.SetCellValue(fila,8,"SIN CONEXION")
                continue

            tabla = "vtas_ctasctes_ajustes"
            fecha = utiles.obtenerFecha("Y-m-d")
            campos="aprobado='1',fechaaprobado='"+fecha+"'"

            id = self.grid1.GetCellValue(fila,0)
            condicion =  "id='"+id+"' \n"
            consultasBD.executaUpdateSQL(None,tabla,campos,condicion)

        if not error:
            self.limpiarGrilla()
            self.llenarGrilla()
            self.button1.SetFocus()
        else:
            utiles.mensaje(None,"Hubo errores en la actualizacion.\nVerifique")
            self.limpiarGrilla()
            self.llenarGrilla()
            self.grid1.SetFocus()

    def borrarAjuste(self,fila):
        tabla = "vtas_ctasctes_ajustes"
        fecha = utiles.obtenerFecha("Y-m-d")
        print fecha
        campos="aprobado='2',fechaaprobado='"+fecha+"'" #0 pendiente, 1 ok, 2 borrar

        id = self.grid1.GetCellValue(fila,0)
        condicion =  "id='"+id+"' \n"
        consultasBD.executaUpdateSQL(None,tabla,campos,condicion)

